package Thread.Thread_Security;

import java.util.Scanner;

public class Demo24 {
    //内存可见性引起的线程安全问题
    private volatile static int n=0;
    public static void main(String[] args) {
        Thread t1=new Thread(()->{
            while(n==0){
//                try {
//                    Thread.sleep(10);
//                    //加入sleep之后，jvm针对内存优化的操作就不会再进行了
//                    //因为和sleep操作相比，读内存比sleep开销小很多很多，此时就没必要针对他进行内存优化了
//                    //可以通过volatile关键字修饰变量，就会提示编译器他是易变的，内存屏障，jvm执行到此处时，就不会再执行内存优化
//                } catch (InterruptedException e) {
//                    throw new RuntimeException(e);
//                }
            }
            System.out.println("t1线程结束");
        });
        Thread t2=new Thread(()->{
            Scanner sc=new Scanner(System.in);
            System.out.println("请输入一个整数：");
            n=sc.nextInt();
        });
        /*t2对于变量的修改操作，在内存上对于t1是不可见的
        volatile关键字解决这个问题*/
        t1.start();
        t2.start();
    }
}
